package com.hyg.topic;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * Created by huangyugen on 2018/07/19
 * 匹配交换器
 * 通过匹配交换器，我们可以配置更灵活的消息系统，你可以在匹配交换器模式下发送这样的路由关键字：
 * “a.b.c”、“c.d”、“quick.orange.rabbit”
 * 不过一定要记住，路由关键字【routingKey】不能超过255个字节（bytes）
 * 匹配交换器的匹配符
 * （星号）表示一个单词
 * #（井号）表示零个或者多个单词
 *
 *
 * 在匹配交互器模式下，消费者端路由关键字 “*” 能接收到生产者端发来路由关键字为空的消息吗  -->可以
 * 在匹配交换器模式下，消费者端路由关键字“#.*”能接收到生产者端以“..”为关键字的消息吗？--》可以
 * 如果发送来的消息只有一个单词，能匹配上吗 --》可以
 **/
public class TopicSend {
    private static final String EXCHANGE_NAME = "topic_logs";
    private static final String HOST = "192.168.1.91";

    public static void main(String[] argv) throws IOException, TimeoutException {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost(HOST);

        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        //声明一个匹配模式的交换器
        channel.exchangeDeclare(EXCHANGE_NAME, "topic");

        // 待发送的消息
        String[] routingKeys = new String[]{"quick.orange.rabbit",
                "lazy.orange.elephant",
                "quick.orange.fox",
                "lazy.brown.fox",
                "quick.brown.fox",
                "quick.orange.male.rabbit",
                "lazy.orange.male.rabbit","a"};
//			发送消息
        for (String severity : routingKeys) {
            String message = "From " + severity + " routingKey' s message!";
            channel.basicPublish(EXCHANGE_NAME, severity, null, message.getBytes());
            System.out.println("TopicSend [x] Sent '" + severity + "':'" + message + "'");
        }
        connection.close();

    }
}
